			  $nolist
$include(C:\ADuC\aduc832\Include\reg832.PDF)
$list

; declaratie interrupt adressen code

codestart   equ   0000h
ext0_int    equ   0003h
timer0_int  equ   000bh
ext1_int    equ   0013h
timer1_int  equ   001bh
serial_int  equ   0023h
timer2_int  equ   002bh
adc_int     equ   0033h
spii2c_int  equ   003bh
psm_int     equ   0043h
timer3_int  equ   0053h
wds_int     equ   005bh


; declaratie constanten programma algemeen

;cr			equ     00dh	;ascii code voor wagenterugloop
;lf			equ     00ah	;ascii code voor line feed (cursor tweede lijn)
cursoff     equ     003h	;ascii code uitschakelen van de cursor

; adres waar stack zal starten (groeit naar hogere adressen)
stack       equ     07fh	; vanaf hiet zit de stack in het geheugen

; program variabelen declaratie locatie
prevkey     equ     030h	; voor toetsenbord
curkey		equ		031h	

; klavier knoppen
knop1		equ     07fh    
knop2		equ     0bfh	
knop3		equ     0dfh	
knop4		equ     0efh							

; interupt vectors
			org   	codestart         ;reset vector
            ljmp  	start
            org   	ext0_int          ;ext int0
            reti
            org   	timer0_int        ;timer0 int
            reti
            org   	ext1_int          ;ext int1
            reti 
            org   	timer1_int        ;timer1 int
            reti
            org   	serial_int        ;serial interrupts
            ljmp	serial_intr
            org   	timer2_int        ;timer2 overflow interrupt om de 500us
            reti
            org   	adc_int           ;adc int
            reti
            org   	spii2c_int        ;spi en iic interrupts
            reti
            org   	psm_int           ;psm int
            reti
            org   	timer3_int        ;timer3 int
            reti
            org   	wds_int           ;watchdog int
            reti

; start program
start:      clr		p2.0   		; set lampke rechts onder
            mov     sp,#stack   ; stakske laden

			mov		pllcon,#01001000b 	; set to fastest speed!

			lcall	initlcd		; init display
			lcall	initsio		; init serial input output
			;lcall	initadc		; init adc for battery
			;mov		dptr,#specchars
			;lcall	build
			
			setb	es			; set reciever interrupt
			setb	ea			; enable interupts

			
		
; -------------------------------------------
; ------------ Main program loop ------------
; -------------------------------------------        							
main:		;mov		a,#cr			; wagenterugloop
			;lcall	outcharlcd	
			;mov		a,#cursoff		; cursor off
			;lcall	outcharlcd

			; DISPLAY FIRST LINE

			mov		a,#'H'
			;lcall	outcharlcd
			mov		a,#'z'
			;lcall	outcharlcd

			lcall 	klavier
			cjne	a,curkey,main_but
			ljmp	main_end	

main_but:	mov		curkey,a

			cjne	a,#knop1,main_02
			mov		a,#'A'
			lcall	outchar
			mov		a,#000h
			lcall	outchar
main_02:	mov		a,curkey
			cjne	a,#knop2,main_03
			mov		a,#'B'
			lcall	outchar
			mov		a,#000h
			lcall	outchar
main_03:	mov		a,curkey
			cjne	a,#knop3,main_04
			mov		a,#'C'
			lcall	outchar
			mov		a,#000h
			lcall	outchar
main_04:	mov		a,curkey
			cjne	a,#knop4,main_end
			mov		a,#'D'
			lcall	outchar
			mov		a,#000h
			lcall	outchar
main_end:  	ljmp	main			



; ----------------------------------------------------
; klavier is een subroutine die het toetsenbord leest.
; We gebruiken de functietoetsen onder het LCD scherm.
; Afhankelijk van de ingedrukte toets wordt in de accu een
; code doorgegeven. De routine zal ook ontdenderen.
; ----------------------------------------------------

klavier:        mov     a,p3            ;schakelaars inlezen
                orl     a,#00fh         ;laagste bits buiten spel
                cjne    a,#0ffh,klavier1        ;als niet ff dan ingedrukt
;                mov     prevkey,#0ffh   ;aangeven niets ingedrukt voor volgende
                                        ;keer
klavier2:       mov     a,#0ffh
                ret                     ;anders einde
                
klavier1:       lcall   delay           ;ontdenderen
                mov     b,a
;                mov     a,prevkey
;                cjne    a,#0ffh,klavier2  ;als niet ff niet verder gaan
;                mov     prevkey,b       ;aangeven wel toets ingedrukt
                mov     a,b
                ret

; ----------------------------------------------------
; delay is een kleine tijdsvertraging voor de ontdendering.
; de vertraging duurt ongeveer 10 mS.
; ----------------------------------------------------

delay:          mov     r0,#000h
                mov     r1,#003h
delay1:         djnz    r0,delay1
                djnz    r1,delay1
                ret
; ----------------------------------------------------
; interrupt routine serial uart
; ----------------------------------------------------
serial_intr:	push 	acc
				push	psw
				push  	dpl
				push  	dph

				jnb		ri,si0		; jump to end if bit is no recieve interrupt

				lcall	inchar
				lcall	outcharlcd
				;lcall	outchar
			

si0:			; einde jump
				pop		dph
				pop		dpl
				pop 	psw
				pop		acc
				reti

; -----------------------------------------------------------
; -- Routine om frequentie door te sturen capture mode (2) --
; -----------------------------------------------------------

sendfreq:		
				lcall	outchar

			

sendfreq_e:		ret


; required includes
$include(C:\ADuC\aduc832\Include\51math2.inc)
$include(C:\ADuC\aduc832\Include\aduclcd1.inc)       ;includen van de LCD driver   
$include(C:\ADuC\aduc832\Include\ADuCsio0x.inc)
			
			end